Spring Boot এবং Multiple DataSource

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM)
200

Spring Boot একটি জনপ্রিয় ফ্রেমওয়ার্ক, যা Java এডভান্সড ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টকে সহজ ও দ্রুত করে তোলে। Spring Boot ORM (Object-Relational Mapping) ব্যবহারের মাধ্যমে ডেটাবেসের সাথে অবজেক্ট মডেলকে সংযুক্ত করা যায়। এতে Java অবজেক্ট এবং রিলেশনাল ডেটাবেসের মধ্যে ডাটা ম্যানিপুলেশন প্রক্রিয়া আরও সহজ ও অটোমেটেড হয়ে যায়।

Spring Boot ORM সাধারণত JPA (Java Persistence API) বা Hibernate এর মাধ্যমে কাজ করে, যেখানে Entity অবজেক্টের মধ্যে ডেটা ম্যানেজমেন্ট করা হয়। JPA/Hibernate Spring Boot অ্যাপ্লিকেশনে ডেটাবেস অপারেশন যেমন ইনসার্ট, আপডেট, ডিলিট ও সিলেক্ট অটোমেটিকভাবে করতে সাহায্য করে।


Multiple DataSource in Spring Boot

Spring Boot অ্যাপ্লিকেশন সাধারণত একটি ডেটাবেস সংযোগের মাধ্যমে কাজ করে, তবে কখনও কখনও একাধিক ডেটাবেস বা ডেটাসোর্স (DataSource) ব্যবহার করার প্রয়োজন হয়। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনে বিভিন্ন ডেটাবেসের জন্য বিভিন্ন কনফিগারেশন থাকে, তাহলে Multiple DataSource কনফিগারেশন ব্যবহৃত হয়। এটি দুটি বা তার বেশি ডেটাবেসের সাথে একযোগে কাজ করার সুযোগ দেয়।

Multiple DataSource কনফিগারেশন তৈরি করা

Multiple DataSource কনফিগারেশন করতে হলে সাধারণত Spring Boot এর @Configuration অ্যানোটেশন ও @Primary ব্যবহৃত হয়। নিম্নলিখিত ধাপে ধাপে দেখা যাক কিভাবে এটি কনফিগার করা যায়।


1. ডেটাবেস কনফিগারেশন

প্রথমে, application.properties বা application.yml ফাইলে দুটি আলাদা ডেটাবেসের কনফিগারেশন করতে হবে।

# Primary DataSource Configuration
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primarydb
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.jpa.hibernate.ddl-auto=update

# Secondary DataSource Configuration
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondarydb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jpa.hibernate.ddl-auto=update

2. DataSource Beans তৈরি করা

এখন, Java Configuration ক্লাসে DataSource, EntityManagerFactory, এবং TransactionManager তৈরি করতে হবে।

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.primary",
    entityManagerFactoryRef = "primaryEntityManagerFactory",
    transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryDataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    public DataSource primaryDataSource() {
        DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.url("jdbc:mysql://localhost:3306/primarydb");
        dataSourceBuilder.username("root");
        dataSourceBuilder.password("root");
        return dataSourceBuilder.build();
    }

    @Primary
    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
        return builder
            .dataSource(dataSource)
            .packages("com.example.model.primary")
            .persistenceUnit("primary")
            .build();
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager transactionManager(
        @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.secondary",
    entityManagerFactoryRef = "secondaryEntityManagerFactory",
    transactionManagerRef = "secondaryTransactionManager"
)
public class SecondaryDataSourceConfig {

    @Bean(name = "secondaryDataSource")
    public DataSource secondaryDataSource() {
        DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.url("jdbc:mysql://localhost:3306/secondarydb");
        dataSourceBuilder.username("root");
        dataSourceBuilder.password("root");
        return dataSourceBuilder.build();
    }

    @Bean(name = "secondaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
        EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource) {
        return builder
            .dataSource(dataSource)
            .packages("com.example.model.secondary")
            .persistenceUnit("secondary")
            .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager secondaryTransactionManager(
        @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

সারাংশ

Spring Boot ORM ব্যবহার করলে ডেটাবেসের সাথে অবজেক্ট মডেলকে সহজে একত্রিত করা সম্ভব। একাধিক ডেটাবেস ব্যবহার করার জন্য Multiple DataSource কনফিগারেশন ব্যবহার করা হয়, যেখানে বিভিন্ন ডেটাবেসের জন্য আলাদা DataSource এবং EntityManagerFactory তৈরি করা হয়। এইভাবে Spring Boot অ্যাপ্লিকেশনে বিভিন্ন ডেটাবেসের সঙ্গে কাজ করা যায়।

Content added By

Multiple DataSource এর ধারণা এবং প্রয়োজনীয়তা

161

Multiple DataSource কি?

Multiple DataSource (বহু ডেটা সোর্স) হল একটি কনফিগারেশন যেখানে একটি অ্যাপ্লিকেশন একাধিক ডেটাবেস বা ডেটা সোর্স ব্যবহার করতে পারে। স্প্রিং বুট ORM (Spring Boot ORM) ব্যবহার করার সময় বিভিন্ন ধরনের ডেটাবেস সংযোগের প্রয়োজন হতে পারে, যেমন একাধিক রিলেশনাল ডেটাবেস, অথবা একাধিক ডেটাবেসের জন্য বিভিন্ন কনফিগারেশন তৈরি করতে হয়।

এটি সাধারণত তখন ব্যবহৃত হয় যখন একটি অ্যাপ্লিকেশনে একাধিক ডেটাবেস সিস্টেম বা বিভিন্ন ডেটাবেস টেবিল ব্যবহারের প্রয়োজন হয়, যেমন - একটি ডেটাবেস ব্যবহৃত হতে পারে রিড অপারেশনের জন্য এবং অন্যটি রাইট অপারেশনের জন্য।

Multiple DataSource এর প্রয়োজনীয়তা

একটি অ্যাপ্লিকেশনে একাধিক ডেটাবেস বা DataSource ব্যবহার করার প্রয়োজনীয়তা বিভিন্ন কারণে হতে পারে। নিচে কিছু মূল কারণ উল্লেখ করা হলো:

১. উচ্চ পারফরম্যান্সের জন্য

কখনো কখনো বিভিন্ন ডেটাবেস আলাদা আলাদা উদ্দেশ্যে ব্যবহৃত হয়, যেমন একটি ডেটাবেস শুধুমাত্র রিড অপারেশনের জন্য এবং অন্যটি রাইট অপারেশনের জন্য। এতে পারফরম্যান্স বৃদ্ধি পায়, কারণ ডেটাবেসগুলো নির্দিষ্ট কাজের জন্য অপ্টিমাইজ করা থাকে।

২. বিভিন্ন ধরনের ডেটাবেস ব্যবহারের ক্ষেত্রে

একটি অ্যাপ্লিকেশন একাধিক ডেটাবেস সিস্টেম যেমন MySQL, PostgreSQL, MongoDB, ইত্যাদি ব্যবহার করতে পারে। স্প্রিং বুট ORM-এর মাধ্যমে এইসব ডেটাবেসগুলোকে আলাদা আলাদা কনফিগারেশন করে একসাথে পরিচালনা করা যায়।

৩. ডেটাবেস মাইগ্রেশন এবং পৃথক ডেটাবেস সিস্টেম

একটি অ্যাপ্লিকেশন কখনো কখনো এক ডেটাবেস সিস্টেম থেকে অন্য সিস্টেমে স্থানান্তরিত হয় বা মাইগ্রেট করা হয়। এমন পরিস্থিতিতে Multiple DataSource কনফিগারেশন ব্যবহার করে নতুন ডেটাবেস সিস্টেমের সাথে পুরনো সিস্টেমের ডেটা ম্যানেজ করা যায়।

৪. টেবিল এবং ডেটাবেস লজিকের আলাদা ব্যবহার

কখনো কখনো অ্যাপ্লিকেশনের কিছু টেবিল বা ডেটাবেস লজিক আলাদা থাকতে পারে, যা একাধিক ডেটাবেসে পরিচালিত হয়। যেমন, এক ডেটাবেসে সংবেদনশীল তথ্য রাখা এবং অন্য ডেটাবেসে সাধারণ তথ্য রাখা।


স্প্রিং বুটে Multiple DataSource কনফিগারেশন

স্প্রিং বুটে Multiple DataSource কনফিগারেশন করার জন্য কিছু স্টেপ অনুসরণ করতে হয়।

১. ডেটাবেস কনফিগারেশন তৈরি করা

প্রথমে আপনাকে প্রতিটি ডেটাবেসের জন্য কনফিগারেশন ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনে দুটি ডেটাবেস থাকে, একটি রিড অপারেশন এবং অন্যটি রাইট অপারেশনের জন্য, তাহলে তাদের জন্য আলাদা আলাদা কনফিগারেশন ক্লাস তৈরি করতে হবে।

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  basePackages = "com.example.readrepository",
  entityManagerFactoryRef = "readEntityManagerFactory",
  transactionManagerRef = "readTransactionManager"
)
public class ReadDataSourceConfig {
    @Bean
    @Primary
    public DataSource readDataSource() {
        return DataSourceBuilder.create().url("jdbc:mysql://localhost:3306/readDB").username("root").password("password").build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean readEntityManagerFactory(@Qualifier("readDataSource") DataSource dataSource, EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dataSource).packages("com.example.model").persistenceUnit("read").build();
    }

    @Bean
    public PlatformTransactionManager readTransactionManager(@Qualifier("readEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

২. ডেটাবেস রেপোজিটরি কনফিগারেশন

প্রতিটি ডেটাবেসের জন্য আলাদা রেপোজিটরি তৈরি করতে হয় এবং সেগুলোকে সঠিক ডেটাবেসের সাথে যুক্ত করতে হয়।

@Repository
public interface ReadRepository extends JpaRepository<ReadEntity, Long> {
    List<ReadEntity> findByField(String field);
}

৩. ডেটাবেস ট্রানজেকশন পরিচালনা করা

যখন একাধিক ডেটাবেস ব্যবহৃত হয়, তখন ট্রানজেকশন ম্যানেজমেন্ট খুবই গুরুত্বপূর্ণ। প্রতিটি DataSource এর জন্য ট্রানজেকশন ম্যানেজার কনফিগারেশনও করতে হয়।


Multiple DataSource ব্যবহারের ফলে আপনার অ্যাপ্লিকেশনের কার্যকারিতা এবং পরিচালন ক্ষমতা অনেক বৃদ্ধি পেতে পারে, বিশেষ করে যখন বড় ডেটাবেস এবং ভিন্ন ধরনের ডেটাবেস সিস্টেম ব্যবহৃত হয়।

Content added By

Spring Boot এ Multiple DataSource কনফিগার করা

154

Spring Boot একটি জনপ্রিয় ফ্রেমওয়ার্ক যা Java এ এন্টারপ্রাইজ অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়। ORM (Object-Relational Mapping) হলো একটি প্রযুক্তি যা ডাটাবেসের সাথে অবজেক্ট গুলোর যোগাযোগের কাজ করে, আর Spring Boot ORM ব্যবহৃত হয় ডাটাবেসের সাথে যোগাযোগ করার জন্য। কখনো কখনো অ্যাপ্লিকেশনের মধ্যে একাধিক ডাটাবেস ব্যবহার করতে হয়। এই পরিস্থিতিতে Multiple DataSource কনফিগার করা প্রয়োজন।

এখানে দেখানো হবে কীভাবে Spring Boot এ Multiple DataSource কনফিগার করা যায়।


Multiple DataSource কনফিগারেশন এর জন্য প্রয়োজনীয় পদক্ষেপ

Spring Boot এ Multiple DataSource কনফিগার করতে হলে, কয়েকটি গুরুত্বপূর্ণ পদক্ষেপ অনুসরণ করতে হয়। চলুন একে একে এগুলো দেখি:

১. ডিপেন্ডেন্সি যুক্ত করা

প্রথমে, pom.xml ফাইলে দুইটি আলাদা ডাটাবেসের জন্য ডিপেন্ডেন্সি যোগ করতে হবে। উদাহরণস্বরূপ, MySQL এবং PostgreSQL:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

২. application.properties (বা application.yml) কনফিগার করা

এখন application.properties ফাইলে বিভিন্ন ডাটাবেসের কনফিগারেশন করতে হবে। উদাহরণস্বরূপ, MySQL এবং PostgreSQL এর জন্য আলাদা কনফিগারেশন করতে হবে:

# MySQL DataSource
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.mysql.username=root
spring.datasource.mysql.password=root
spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.mysql.jpa.hibernate.ddl-auto=update
spring.datasource.mysql.jpa.show-sql=true

# PostgreSQL DataSource
spring.datasource.postgresql.url=jdbc:postgresql://localhost:5432/postgresql_db
spring.datasource.postgresql.username=postgres
spring.datasource.postgresql.password=postgres
spring.datasource.postgresql.driver-class-name=org.postgresql.Driver
spring.datasource.postgresql.jpa.hibernate.ddl-auto=update
spring.datasource.postgresql.jpa.show-sql=true

৩. DataSource Bean কনফিগার করা

এখন Spring Boot এ দুটি আলাদা DataSource Bean কনফিগার করতে হবে, যাতে আপনি নির্দিষ্ট ডাটাবেস ব্যবহার করতে পারেন।

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    @Primary
    @Bean(name = "mysqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    public DataSource mysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "postgresDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.postgresql")
    public DataSource postgresDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public PlatformTransactionManager transactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

এখানে, @Primary অ্যনোটেশনটি MySQL ডাটাবেসকে প্রধান DataSource হিসেবে চিহ্নিত করে।

৪. Entity Manager Factory কনফিগার করা

Spring Boot এ EntityManagerFactory কনফিগার করতে হবে যাতে ORM (JPA) ডাটাবেসের সাথে সংযোগ স্থাপন করতে পারে।

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.repository.mysql", 
    entityManagerFactoryRef = "mysqlEntityManagerFactory", 
    transactionManagerRef = "mysqlTransactionManager"
)
public class MysqlJpaConfig {

    @Primary
    @Bean(name = "mysqlEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        @Qualifier("mysqlDataSource") DataSource dataSource, 
        EntityManagerFactoryBuilder builder) {
        return builder
            .dataSource(dataSource)
            .packages("com.example.model.mysql")
            .persistenceUnit("mysql")
            .build();
    }

    @Primary
    @Bean(name = "mysqlTransactionManager")
    public PlatformTransactionManager transactionManager(
        @Qualifier("mysqlEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এটি MySQL ডাটাবেসের জন্য EntityManagerFactory কনফিগার করে এবং ট্যাক্সন ম্যানেজার তৈরি করে।

৫. PostgreSQL এর জন্য কনফিগারেশন

PostgreSQL এর জন্যও একইভাবে EntityManagerFactory এবং Repository কনফিগার করতে হবে।

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.repository.postgresql", 
    entityManagerFactoryRef = "postgresEntityManagerFactory", 
    transactionManagerRef = "postgresTransactionManager"
)
public class PostgresqlJpaConfig {

    @Bean(name = "postgresEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        @Qualifier("postgresDataSource") DataSource dataSource, 
        EntityManagerFactoryBuilder builder) {
        return builder
            .dataSource(dataSource)
            .packages("com.example.model.postgresql")
            .persistenceUnit("postgresql")
            .build();
    }

    @Bean(name = "postgresTransactionManager")
    public PlatformTransactionManager transactionManager(
        @Qualifier("postgresEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এভাবে Spring Boot এ Multiple DataSource কনফিগার করা যায়। এই প্রক্রিয়ায়, আপনার অ্যাপ্লিকেশন একাধিক ডাটাবেসের সাথে একযোগে কাজ করতে সক্ষম হবে।


Content added By

উদাহরণ সহ Multiple DataSource ব্যবস্থাপনা

183

Spring Boot ORM (Object Relational Mapping) একটি শক্তিশালী ফ্রেমওয়ার্ক, যা ডেটাবেসের সাথে কার্যকরীভাবে কাজ করতে সহায়তা করে। Spring Boot ব্যবহার করে একাধিক (Multiple) ডেটাবেস সংযোগ পরিচালনা করা সম্ভব, যা বিশেষত বিভিন্ন ডেটাবেস ব্যবহার করার প্রয়োজন হলে কার্যকরী হতে পারে।

ORM (Object Relational Mapping) প্যাটার্নে, ডেটাবেসের টেবিলগুলিকে জাভা অবজেক্টের সাথে ম্যাপ করা হয়। Spring Boot এই কাজটি অত্যন্ত সহজ করে তোলে, এবং এই প্রক্রিয়া খুবই কার্যকরী। Spring Boot এ Multiple DataSource ব্যবস্থাপনা করা হলে, বিভিন্ন ডেটাবেসের সাথে একযোগে কাজ করা সম্ভব হয়।


Multiple DataSource ব্যবস্থাপনা কী?

Multiple DataSource ব্যবস্থাপনা এমন একটি প্রক্রিয়া, যেখানে একাধিক ডেটাবেসের সাথে সম্পর্কিত সংযোগ একাধিক DataSource তৈরি করে পরিচালনা করা হয়। Spring Boot সাধারণত একটি ডেটাবেস ব্যবহার করলেও, যখন একাধিক ডেটাবেসের সাথে কাজ করার প্রয়োজন হয়, তখন Spring Boot বিভিন্ন কনফিগারেশন মাধ্যমে এই ব্যবস্থা চালু করতে সাহায্য করে।


Multiple DataSource কনফিগারেশন

Spring Boot এ Multiple DataSource কনফিগারেশনের জন্য সাধারণত দুইটি প্রধান উপাদান প্রয়োজন:

  1. DataSource Configuration (ডেটাসোর্স কনফিগারেশন)
  2. Transaction Manager Configuration (ট্রানজ্যাকশন ম্যানেজার কনফিগারেশন)

এই দুটি উপাদানকে কনফিগার করা হয় যাতে দুইটি বা ততোধিক ডেটাবেসের সাথে সঠিকভাবে কাজ করা যায়।


উদাহরণ সহ Multiple DataSource কনফিগারেশন

ধরা যাক, আমাদের দুটি আলাদা ডেটাবেস রয়েছে — primaryDataSource এবং secondaryDataSource। নিচে তাদের জন্য কনফিগারেশন এবং উদাহরণ দেওয়া হলো:

১. Application Properties ফাইল কনফিগারেশন

প্রথমে, application.properties বা application.yml ফাইলে ডেটাবেসের সংযোগ সেটআপ করতে হবে।

# Primary DataSource Configuration
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.jpa.hibernate.ddl-auto=update
spring.datasource.primary.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

# Secondary DataSource Configuration
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jpa.hibernate.ddl-auto=update
spring.datasource.secondary.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

২. DataSource কনফিগারেশন ক্লাস তৈরি করা

এখন, আমরা দুটি আলাদা DataSource কনফিগারেশন ক্লাস তৈরি করব।

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.primary",
    entityManagerFactoryRef = "primaryEntityManagerFactory",
    transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryDataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder, 
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.model.primary")
                .persistenceUnit("primary")
                .build();
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এখানে @Primary অ্যানোটেশন ব্যবহার করা হয়েছে, যা Spring Boot কে নির্দেশ করে যে, এটি প্রধান DataSource হিসেবে কাজ করবে। আর দ্বিতীয় DataSource এর জন্য একটি আলাদা কনফিগারেশন ক্লাস তৈরি করা হবে।

৩. Secondary DataSource কনফিগারেশন

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.secondary",
    entityManagerFactoryRef = "secondaryEntityManagerFactory",
    transactionManagerRef = "secondaryTransactionManager"
)
public class SecondaryDataSourceConfig {

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder, 
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.model.secondary")
                .persistenceUnit("secondary")
                .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

৪. Repository কনফিগারেশন

প্রতিটি ডেটাবেসের জন্য আলাদা Repository ইন্টারফেস থাকবে, যেখানে @EnableJpaRepositories ব্যবহার করে প্রতিটি ডেটাবেসের জন্য আলাদা EntityManagerFactory এবং TransactionManager কনফিগার করা হয়।

public interface PrimaryRepository extends JpaRepository<PrimaryEntity, Long> {
}

public interface SecondaryRepository extends JpaRepository<SecondaryEntity, Long> {
}

সারাংশ

Spring Boot ORM ব্যবহার করে Multiple DataSource কনফিগারেশন সম্পন্ন করার মাধ্যমে একাধিক ডেটাবেসের সাথে সহজেই কাজ করা সম্ভব। এই কনফিগারেশনটি Java এর Spring Framework এর শক্তিশালী ORM পদ্ধতিকে ব্যবহার করে, যা ডেটাবেস সম্পর্কিত কার্যক্রমকে খুবই সহজ এবং কার্যকর করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...